package com.lqian.stream.filter;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class UserTest {


    public static void main(String[] args) {
//        List<User> userList = Arrays.asList(
//          new User("jack1",22,3000),
//          new User("jack2",21,1000),
//          new User("jack2",21,2000)
//        );

        //需求：筛选年龄>20
//        List<User> newList = new ArrayList<>();
//        for (User user:userList) {
//            if (user.getAge() >20) newList.add(user);
//        }
//        System.out.println(newList.toString());


        //stream
//        Predicate<User> predicate1 = user -> user.getAge() >20;
//        Predicate<User> predicate2 = user -> user.getSalary() >2000;
//
//
//        List<User> usersFilter = userList.stream().filter(predicate1)
//                .filter(predicate2)
//                .collect(Collectors.toList());

        //.and
        //.or
//        List<User> usersFilter = userList.stream().filter(predicate1.and(predicate2))
//                .collect(Collectors.toList());

//        System.out.println(usersFilter.toString());

        //filter
//        List<String> list = Arrays.asList("Hello","World","Java");
//        list.stream().filter(str->str.length()>=5)
//                .forEach(str-> System.out.println(str));
//
//        //limit 截取
//        list.stream().limit(2)
//                .forEach(str-> System.out.println(str));

        //sorted 正序
        List<Integer> list = Arrays.asList(1,6,2,5,3);
//        list.stream().sorted()
//                .forEach(num-> System.out.println(num));
//        System.out.println("=====");
//        //逆序
//        List<Integer> list2 = Arrays.asList(1,6,2,5,3);
//        list2.stream().sorted(Comparator.reverseOrder())
//                .forEach(num-> System.out.println(num));
//        System.out.println("=====");
//        //max 得到的是一个optional的对象 .get() 得到数据
////        Optional<Integer> max = list.stream()
////                .max(Integer::compareTo);//条件 按照Integer的排序方式 1 2 3..
//        System.out.println(list.stream()
//                .max(Integer::compareTo).get());
//        //min
//        System.out.println(list.stream().min(Integer::compareTo).get());
//        //count 长度
//        System.out.println(list.stream().count());
        //map : 对集合中的元素进行特定的操作 将逻辑操作后的数据 再传到这个map中
        //需求： 对每一个元素进行+10 然后输出
//        list.stream()
//                .map(num -> num + 10)
//                .forEach(num -> System.out.println(num));

        //reduce  对集合中的元素进行特定的操作  将逻辑操作后的数据 合并到一个值返回
//        System.out.println(list.stream()
//                .reduce((sum, num) -> sum + num).get());

        //collection  对其操作生成一个新的集合
        List<Integer> collect = list.stream()
                .filter(num -> num % 2 == 0)
                .collect(Collectors.toList());
        System.out.println(collect);
    }
}
